﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class Contrato
    {
        #region Variaveis Membros
        private int _idContrato;
        private TipoDocumento _tipoDocumento;
        private string _descricao;
        private DateTime _dataInicioVigencia;
        private DateTime _dataFimVigencia;
        private DateTime _dataProrrogacao;
        private DateTime _dataRescindir;
        private string _observacao;
        private DateTime _dataImplantacao;
        private StatusContrato _statusContrato;
        private string _emitirNF;
        private TipoPeriodicidade _tipoPeriodicidade;
        private DateTime _dia;
        private string _tipoDia;
        private string _path;
        private string _nomeArquivo;
        private OrganizacaoPatrocinadorPrestador _organizacaoRelacao;
        private List<ContratoGestor> _contratoGestor;
        private GENTEEntities _context;

        private const int _idTipoDocumentoVigencia = 1;
        #endregion

        #region Parametros
        public int IdContrato
        {
            get { return _idContrato; }
            set { _idContrato = value; }
        }
        public TipoDocumento TipoDocumento
        {
            get { return _tipoDocumento; }
            set { _tipoDocumento = value; }
        }
        public string Descricao
        {
            get { return _descricao; }
            set { _descricao = value; }
        }
        public DateTime DataInicioVigencia
        {
            get { return _dataInicioVigencia; }
            set { _dataInicioVigencia = value; }
        }
        public DateTime DataFimVigencia
        {
            get { return _dataFimVigencia; }
            set { _dataFimVigencia = value; }
        }
        public DateTime DataProrrogacao
        {
            get { return _dataProrrogacao; }
            set { _dataProrrogacao = value; }
        }
        public DateTime DataRescindir
        {
            get { return _dataRescindir; }
            set { _dataRescindir = value; }
        }
        public string Observacao
        {
            get { return _observacao; }
            set { _observacao = value; }
        }
        public DateTime DataImplantacao
        {
            get { return _dataImplantacao; }
            set { _dataImplantacao = value; }
        }
        public StatusContrato StatusContrato
        {
            get { return _statusContrato; }
            set { _statusContrato = value; }
        }
        public string EmitirNF
        {
            get { return _emitirNF; }
            set { _emitirNF = value; }
        }
        public TipoPeriodicidade TipoPeriodicidade
        {
            get { return _tipoPeriodicidade; }
            set { _tipoPeriodicidade = value; }
        }
        public DateTime Dia
        {
            get { return _dia; }
            set { _dia = value; }
        }
        public string TipoDia
        {
            get { return _tipoDia; }
            set { _tipoDia = value; }
        }
        public string NomeArquivo
        {
            get { return _nomeArquivo; }
            set { _nomeArquivo = value; }
        }
        public string Path
        {
            get { return _path; }
            set { _path = value; }
        }
        public OrganizacaoPatrocinadorPrestador OrganizacaoRelacao
        {
            get { return _organizacaoRelacao; }
            set { _organizacaoRelacao = value; }
        }
        public List<ContratoGestor> ContratoGestor
        {
            get { return _contratoGestor; }
            set { _contratoGestor = value; }
        }
        #endregion

        #region Construtores
        public Contrato()
        {
            try
            {
                _context = new GENTEEntities();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public Contrato(int idContrato)
        {
            try
            {
                _context = new GENTEEntities();
                Carregar(idContrato);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Privados
        private void Carregar(int idContrato)
        {
            try
            {
                var consulta = from c in _context.tab_contrato
                               where c.Id_contrato == idContrato
                               select new
                               {
                                   c.Id_contrato,
                                   c.tab_organizacao_relacao_patrocinador.id_organ_relacao,
                                   c.tab_tipo_documento.Id_tipo_documento,
                                   c.descricao,
                                   c.dt_inicio_vigencia,
                                   c.dt_fim_vigencia,
                                   c.dt_prorrogacao,
                                   c.dt_rescindir,
                                   c.obs,
                                   c.dt_implantacao,
                                   c.tab_status_contrato.id_status_contrato,
                                   c.Emitir_NF,
                                   //contrato.tab_tipo_periodicidade.id_tipo_periodicidade,
                                   //c.dia,
                                   //c.tipo_dia,
                                   c.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    _idContrato = list.Id_contrato;
                    _tipoDocumento = new TipoDocumento(list.Id_tipo_documento);
                    _descricao = list.descricao;
                    _dataInicioVigencia = list.dt_inicio_vigencia;
                    _dataFimVigencia = list.dt_fim_vigencia;
                    if (list.dt_prorrogacao != null)
                        _dataProrrogacao = (list.dt_prorrogacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_prorrogacao.ToString());//list.dt_prorrogacao;
                    if (list.dt_rescindir != null)
                        _dataRescindir = (list.dt_rescindir == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_rescindir.ToString());//list.dt_rescindir;
                    _observacao = list.obs;
                    if (list.dt_implantacao != null)
                        _dataImplantacao = (list.dt_implantacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_implantacao.ToString());//list.dt_implantacao;
                    _statusContrato = new StatusContrato(list.id_status_contrato);
                    _emitirNF = list.Emitir_NF;
                    //if (list.id_tipo_periodicidade != null)
                    //    this._tipoPeriodicidade = new TipoPeriodicidade(list.id_tipo_periodicidade);
                    //if (list.dia == null)
                    //    _dia = (list.dia == null) ? DateTime.MinValue : Convert.ToDateTime(list.dia.ToString());//list.dia;
                    //_tipoDia = list.tipo_dia;
                    _path = list.path;
                    _organizacaoRelacao = new OrganizacaoPatrocinadorPrestador(list.id_organ_relacao);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        //Retorna o ultimo
        private int RetornaIdContrato(int idOrganRelacao, int idTipoDocumento, string descricao, DateTime dtInicioVigencia, DateTime dtFimVigencia)
        {
            try
            {
                int idContrato = 0;

                var consulta = from contrato in _context.tab_contrato
                               where contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao == idOrganRelacao
                               && contrato.tab_tipo_documento.Id_tipo_documento == idTipoDocumento
                               && contrato.descricao == descricao
                               && contrato.dt_inicio_vigencia == dtInicioVigencia
                               && contrato.dt_fim_vigencia == dtFimVigencia
                               orderby contrato.Id_contrato descending
                               select new
                               {
                                   contrato.Id_contrato,
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    idContrato = list.Id_contrato;
                    break;
                }

                return idContrato;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Publicos

        #region Metodos de Selecao
        public List<Contrato> SelectAll()
        {
            try
            {
                List<Contrato> listContrato = new List<Contrato>();

                var consulta = from contrato in _context.tab_contrato
                               select new
                               {
                                   contrato.Id_contrato,
                                   contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao,
                                   contrato.tab_tipo_documento.Id_tipo_documento,
                                   contrato.descricao,
                                   contrato.dt_inicio_vigencia,
                                   contrato.dt_fim_vigencia,
                                   contrato.dt_prorrogacao,
                                   contrato.dt_rescindir,
                                   contrato.obs,
                                   contrato.dt_implantacao,
                                   contrato.tab_status_contrato.id_status_contrato,
                                   contrato.Emitir_NF,
                                   //contrato.tab_tipo_periodicidade.id_tipo_periodicidade,
                                   //contrato.dia,
                                   //contrato.tipo_dia,
                                   contrato.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    Contrato contrato = new Contrato();
                    contrato.IdContrato = list.Id_contrato;
                    contrato.TipoDocumento = new TipoDocumento(list.Id_tipo_documento);
                    contrato.Descricao = list.descricao;
                    contrato.DataInicioVigencia = list.dt_inicio_vigencia;
                    contrato.DataFimVigencia = list.dt_fim_vigencia;
                    contrato.DataProrrogacao = (list.dt_prorrogacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_prorrogacao.ToString());//list.dt_prorrogacao;
                    contrato.DataRescindir = (list.dt_rescindir == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_rescindir.ToString());//list.dt_rescindir;
                    contrato.Observacao = list.obs;
                    contrato.DataImplantacao = (list.dt_implantacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_implantacao.ToString());//list.dt_implantacao;
                    contrato.StatusContrato = new StatusContrato(list.id_status_contrato);
                    contrato.EmitirNF = list.Emitir_NF;
                    //if (list.id_tipo_periodicidade != null)
                    //    contrato.TipoPeriodicidade = new TipoPeriodicidade(list.id_tipo_periodicidade);
                    //contrato.Dia = (list.dia == null) ? DateTime.MinValue : Convert.ToDateTime(list.dia.ToString());//list.dia;
                    //contrato.TipoDia = list.tipo_dia;
                    contrato.Path = list.path;
                    if (list.id_organ_relacao != null)
                        this.OrganizacaoRelacao = new OrganizacaoPatrocinadorPrestador(list.id_organ_relacao);

                    listContrato.Add(contrato);
                }

                return listContrato;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<Contrato> SelectContratoVigencia(int idOrganRelacao)
        {
            try
            {
                List<Contrato> listContrato = new List<Contrato>();

                var consulta = from contrato in _context.tab_contrato
                               where contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao != null
                               && contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao == idOrganRelacao
                               && contrato.tab_tipo_documento.Id_tipo_documento == _idTipoDocumentoVigencia
                               select new
                               {
                                   contrato.Id_contrato,
                                   contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao,
                                   contrato.tab_tipo_documento.Id_tipo_documento,
                                   contrato.descricao,
                                   contrato.dt_inicio_vigencia,
                                   contrato.dt_fim_vigencia,
                                   contrato.dt_prorrogacao,
                                   contrato.dt_rescindir,
                                   contrato.obs,
                                   contrato.dt_implantacao,
                                   contrato.tab_status_contrato.id_status_contrato,
                                   contrato.Emitir_NF,
                                   //contrato.tab_tipo_periodicidade.id_tipo_periodicidade,
                                   //contrato.dia,
                                   //contrato.tipo_dia,
                                   contrato.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    Contrato contrato = new Contrato();
                    contrato.IdContrato = list.Id_contrato;
                    contrato.TipoDocumento = new TipoDocumento(list.Id_tipo_documento);
                    contrato.Descricao = list.descricao;
                    contrato.DataInicioVigencia = list.dt_inicio_vigencia;
                    contrato.DataFimVigencia = list.dt_fim_vigencia;
                    if (list.dt_prorrogacao != null)
                        contrato.DataProrrogacao = (list.dt_prorrogacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_prorrogacao.ToString());//list.dt_prorrogacao;
                    if (list.dt_rescindir != null)
                        contrato.DataRescindir = (list.dt_rescindir == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_rescindir.ToString());//list.dt_rescindir;
                    contrato.Observacao = list.obs;
                    if (list.dt_implantacao != null)
                        contrato.DataImplantacao = (list.dt_implantacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_implantacao.ToString());//list.dt_implantacao;
                    contrato.StatusContrato = new StatusContrato(list.id_status_contrato);
                    contrato.EmitirNF = list.Emitir_NF;
                    //if (list.id_tipo_periodicidade != null)
                    //    this._tipoPeriodicidade = new TipoPeriodicidade(list.id_tipo_periodicidade);
                    //if (list.dia == null)
                    //    contrato.Dia = (list.dia == null) ? DateTime.MinValue : Convert.ToDateTime(list.dia.ToString());//list.dia;
                    //contrato.TipoDia = list.tipo_dia;
                    contrato.Path = list.path;
                    contrato.OrganizacaoRelacao = new OrganizacaoPatrocinadorPrestador(list.id_organ_relacao);

                    listContrato.Add(contrato);
                }

                return listContrato;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<Contrato> SelectContratoVigencia(string descricao, int idOrganRelacao)
        {
            try
            {
                List<Contrato> listContrato = new List<Contrato>();

                var consulta = from contrato in _context.tab_contrato
                               where contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao != null
                               && ((descricao != "") ? contrato.descricao.Contains(descricao) : 1 == 1)
                               && contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao == idOrganRelacao
                               && contrato.tab_tipo_documento.Id_tipo_documento == _idTipoDocumentoVigencia
                               select new
                               {
                                   contrato.Id_contrato,
                                   contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao,
                                   contrato.tab_tipo_documento.Id_tipo_documento,
                                   contrato.descricao,
                                   contrato.dt_inicio_vigencia,
                                   contrato.dt_fim_vigencia,
                                   contrato.dt_prorrogacao,
                                   contrato.dt_rescindir,
                                   contrato.obs,
                                   contrato.dt_implantacao,
                                   contrato.tab_status_contrato.id_status_contrato,
                                   contrato.Emitir_NF,
                                   //contrato.tab_tipo_periodicidade.id_tipo_periodicidade,
                                   //contrato.dia,
                                   //contrato.tipo_dia,
                                   contrato.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    Contrato contrato = new Contrato();
                    contrato.IdContrato = list.Id_contrato;
                    contrato.TipoDocumento = new TipoDocumento(list.Id_tipo_documento);
                    contrato.Descricao = list.descricao;
                    contrato.DataInicioVigencia = list.dt_inicio_vigencia;
                    contrato.DataFimVigencia = list.dt_fim_vigencia;
                    if (list.dt_prorrogacao != null)
                        contrato.DataProrrogacao = (list.dt_prorrogacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_prorrogacao.ToString());//list.dt_prorrogacao;
                    if (list.dt_rescindir != null)
                        contrato.DataRescindir = (list.dt_rescindir == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_rescindir.ToString());//list.dt_rescindir;
                    contrato.Observacao = list.obs;
                    if (list.dt_implantacao != null)
                        contrato.DataImplantacao = (list.dt_implantacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_implantacao.ToString());//list.dt_implantacao;
                    contrato.StatusContrato = new StatusContrato(list.id_status_contrato);
                    contrato.EmitirNF = list.Emitir_NF;
                    //if (list.id_tipo_periodicidade != null)
                    //    this._tipoPeriodicidade = new TipoPeriodicidade(list.id_tipo_periodicidade);
                    //if (list.dia == null)
                    //    contrato.Dia = (list.dia == null) ? DateTime.MinValue : Convert.ToDateTime(list.dia.ToString());//list.dia;
                    //contrato.TipoDia = list.tipo_dia;
                    contrato.Path = list.path;
                    contrato.OrganizacaoRelacao = new OrganizacaoPatrocinadorPrestador(list.id_organ_relacao);

                    listContrato.Add(contrato);
                }

                return listContrato;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<Contrato> SelectContratoVigenciaCombo(string descricao, int idOrganRelacao)
        {
            try
            {
                List<Contrato> listContrato = new List<Contrato>();

                var consulta = from contrato in _context.tab_contrato
                               where contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao != null
                               && ((descricao != "") ? contrato.descricao.StartsWith(descricao) : 1 == 1)
                               && contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao == idOrganRelacao
                               && contrato.tab_tipo_documento.Id_tipo_documento == _idTipoDocumentoVigencia
                               select new
                               {
                                   contrato.Id_contrato,
                                   contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao,
                                   contrato.tab_tipo_documento.Id_tipo_documento,
                                   contrato.descricao,
                                   contrato.dt_inicio_vigencia,
                                   contrato.dt_fim_vigencia,
                                   contrato.dt_prorrogacao,
                                   contrato.dt_rescindir,
                                   contrato.obs,
                                   contrato.dt_implantacao,
                                   contrato.tab_status_contrato.id_status_contrato,
                                   contrato.Emitir_NF,
                                   //contrato.tab_tipo_periodicidade.id_tipo_periodicidade,
                                   //contrato.dia,
                                   //contrato.tipo_dia,
                                   contrato.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    Contrato contrato = new Contrato();
                    contrato.IdContrato = list.Id_contrato;
                    //contrato.TipoDocumento = new TipoDocumento(list.Id_tipo_documento);
                    contrato.Descricao = list.descricao;
                    contrato.DataInicioVigencia = list.dt_inicio_vigencia;
                    contrato.DataFimVigencia = list.dt_fim_vigencia;
                    contrato.DataProrrogacao = (list.dt_prorrogacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_prorrogacao.ToString());//list.dt_prorrogacao;
                    contrato.DataRescindir = (list.dt_rescindir == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_rescindir.ToString());//list.dt_rescindir;
                    contrato.Observacao = list.obs;
                    contrato.DataImplantacao = (list.dt_implantacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_implantacao.ToString());//list.dt_implantacao;
                    contrato.StatusContrato = new StatusContrato(list.id_status_contrato);
                    contrato.EmitirNF = list.Emitir_NF;
                    //if (list.id_tipo_periodicidade != null)
                    //    this._tipoPeriodicidade = new TipoPeriodicidade(list.id_tipo_periodicidade);
                    //contrato.Dia = (list.dia == null) ? DateTime.MinValue : Convert.ToDateTime(list.dia.ToString());//list.dia;
                    //contrato.TipoDia = list.tipo_dia;
                    contrato.Path = list.path;
                    //contrato.OrganizacaoRelacao = new OrganizacaoPatrocinadorPrestador(list.id_organ_relacao);

                    listContrato.Add(contrato);
                }

                return listContrato;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public string RetornaDescricaoContrato(int idContrato)
        {
            try
            {
                string descricao = string.Empty;

                var consulta = from c in _context.tab_contrato
                               where c.Id_contrato == idContrato
                               select new
                               {
                                   c.Id_contrato,
                                   c.descricao,
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    descricao = list.descricao;
                    break;
                }

                return descricao;
            }
            catch (Exception ex)
            {
                
                throw;
            }
        }
        public List<Contrato> SelectContratoVigencia(int idPatrocinador, int idPrestador)
        {
            try
            {
                List<Contrato> listContrato = new List<Contrato>();

                var consulta = from contrato in _context.tab_contrato
                               where contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao != null
                               && contrato.tab_organizacao_relacao_patrocinador.tab_organizacao1.Id_organizacao == idPrestador
                               && contrato.tab_organizacao_relacao_patrocinador.tab_organizacao.Id_organizacao == idPatrocinador
                               && contrato.tab_tipo_documento.Id_tipo_documento == _idTipoDocumentoVigencia
                               select new
                               {
                                   contrato.Id_contrato,
                                   contrato.tab_organizacao_relacao_patrocinador.id_organ_relacao,
                                   contrato.tab_tipo_documento.Id_tipo_documento,
                                   contrato.descricao,
                                   contrato.dt_inicio_vigencia,
                                   contrato.dt_fim_vigencia,
                                   contrato.dt_prorrogacao,
                                   contrato.dt_rescindir,
                                   contrato.obs,
                                   contrato.dt_implantacao,
                                   contrato.tab_status_contrato.id_status_contrato,
                                   contrato.Emitir_NF,
                                   //contrato.tab_tipo_periodicidade.id_tipo_periodicidade,
                                   //contrato.dia,
                                   //contrato.tipo_dia,
                                   contrato.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    Contrato contrato = new Contrato();
                    contrato.IdContrato = list.Id_contrato;
                    //contrato.TipoDocumento = new TipoDocumento(list.Id_tipo_documento);
                    contrato.Descricao = list.descricao;
                    contrato.DataInicioVigencia = list.dt_inicio_vigencia;
                    contrato.DataFimVigencia = list.dt_fim_vigencia;
                    contrato.DataProrrogacao = (list.dt_prorrogacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_prorrogacao.ToString());//list.dt_prorrogacao;
                    contrato.DataRescindir = (list.dt_rescindir == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_rescindir.ToString());//list.dt_rescindir;
                    contrato.Observacao = list.obs;
                    contrato.DataImplantacao = (list.dt_implantacao == null) ? DateTime.MinValue : Convert.ToDateTime(list.dt_implantacao.ToString());//list.dt_implantacao;
                    contrato.StatusContrato = new StatusContrato(list.id_status_contrato);
                    contrato.EmitirNF = list.Emitir_NF;
                    //if (list.id_tipo_periodicidade != null)
                    //    this._tipoPeriodicidade = new TipoPeriodicidade(list.id_tipo_periodicidade);
                    //contrato.Dia = (list.dia == null) ? DateTime.MinValue : Convert.ToDateTime(list.dia.ToString());//list.dia;
                    //contrato.TipoDia = list.tipo_dia;
                    contrato.Path = list.path;
                    //contrato.OrganizacaoRelacao = new OrganizacaoPatrocinadorPrestador(list.id_organ_relacao);

                    listContrato.Add(contrato);
                }

                return listContrato;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos de Persistencia
        public void SalvarContratoVigencia()
        {
            try
            {
                if (_idContrato == 0)
                {
                    //Grava Contrato
                    tab_contrato tabContrato = new tab_contrato();
                    tabContrato.tab_organizacao_relacao_patrocinadorReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_organizacao_relacao_patrocinador", "id_organ_relacao", _organizacaoRelacao.IdOrganizacaoRelacao);
                    tabContrato.tab_tipo_documentoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_documento", "Id_tipo_documento", _tipoDocumento.IdTipoDocumento);
                    tabContrato.descricao = _descricao;
                    tabContrato.dt_inicio_vigencia = _dataInicioVigencia;
                    tabContrato.dt_fim_vigencia = _dataFimVigencia;
                    if (_dataImplantacao != DateTime.MinValue)
                        tabContrato.dt_implantacao = _dataImplantacao;
                    tabContrato.tab_status_contratoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_status_contrato", "id_status_contrato", _statusContrato.IdStatusContrato);
                    //tabContrato.path = _path;
                    tabContrato.Emitir_NF = "N";
                    tabContrato.obs = _observacao;

                    _context.AddTotab_contrato(tabContrato);
                    _context.SaveChanges();

                    _idContrato = RetornaIdContrato(_organizacaoRelacao.IdOrganizacaoRelacao, _tipoDocumento.IdTipoDocumento, _descricao, _dataInicioVigencia, _dataFimVigencia);

                    //Grava Path
                    _nomeArquivo = _tipoDocumento.IdTipoDocumento.ToString() + _idContrato.ToString() + ".pdf";
                    AtualizaPath(_idContrato, _path + _nomeArquivo);

                    //Grava ContratoGestor
                    foreach (ContratoGestor item in _contratoGestor)
                    {
                        Contrato contratoCG = new Contrato();
                        contratoCG.IdContrato = _idContrato;
                        item.Contrato = contratoCG;
                        item.Salvar();
                    }

                }
                else
                {
                    tab_contrato tabContrato = (from c in _context.tab_contrato
                                                where c.Id_contrato == _idContrato
                                                select c).First();

                    tabContrato.tab_organizacao_relacao_patrocinadorReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_organizacao_relacao_patrocinador", "id_organ_relacao", _organizacaoRelacao.IdOrganizacaoRelacao);
                    tabContrato.tab_tipo_documentoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_documento", "Id_tipo_documento", _tipoDocumento.IdTipoDocumento);
                    tabContrato.descricao = _descricao;
                    tabContrato.dt_inicio_vigencia = _dataInicioVigencia;
                    tabContrato.dt_fim_vigencia = _dataFimVigencia;
                    if (_dataImplantacao != DateTime.MinValue)
                        tabContrato.dt_implantacao = _dataImplantacao;
                    tabContrato.tab_status_contratoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_status_contrato", "id_status_contrato", _statusContrato.IdStatusContrato);
                    tabContrato.path = _path;
                    tabContrato.Emitir_NF = "N";
                    tabContrato.obs = _observacao;

                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private void AtualizaPath(int idContrato, string path)
        {
            try
            {
                tab_contrato tabContrato = (from c in _context.tab_contrato
                                                where c.Id_contrato == _idContrato
                                                select c).First();

                tabContrato.path = path;

                _context.SaveChanges();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #endregion

    }
}
